package com.simple.util.security;

import java.util.regex.Pattern;

/**
 * @program: simple_tools
 * @description: 密码检测工具类
 * @author: Mr.chen
 * @create: 2020-05-18 11:26
 **/
public class PasswordUtil {

    /**
     * 判断是否为纯数字简单密码
     * @param pwd
     * @return 如 111111 123456 654321返回true
     */
    public static boolean isSimplePwd(String pwd) {
        if (null == pwd || "".equals(pwd.trim())) {
            return false;
        }
        if (!Pattern.compile("[0-9]*").matcher(pwd).matches()) {
            return false;
        }

        boolean flag1 = true;
        boolean flag2 = true;
        boolean flag3 = true;
        char[] chars = pwd.toCharArray();
        int iterations = chars.length - 1;
        for (int i = 0; i < iterations; i++) {
            int num1 = Integer.parseInt(chars[i] + "");
            int num2 = Integer.parseInt(chars[i + 1] + "");

            if (num1 != num2 - 1) {
                flag1 = false;
            }
            if (num1 != num2 + 1) {
                flag2 = false;
            }
            if (num1 != num2) {
                flag3 = false;
            }
            if (!(flag1 || flag2 || flag3)) {
                break;
            }
        }
        return (flag1 || flag2 || flag3);
    }

    /**
     *  检查密码合格性
     * @param pwd
     * @return 密码长度需8-32位且至少含数字、字母、字符中的两种 true
     */
    public static boolean pwdIsOk(String pwd) {
        if (null == pwd || "".equals(pwd.trim())) {
            return false;
        }
        String pattern = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]{8,32}$";
        return Pattern.compile(pattern).matcher(pwd).matches();
    }

    public static String checkPassword(String pwd) {
        String regexZ = "\\d*";
        String regexS = "[a-zA-Z]+";
        String regexT = "\\W+$";
        String regexZT = "\\D*";
        String regexST = "[\\d\\W]*";
        String regexZS = "\\w*";
        String regexZST = "[\\w\\W]*";

        if (pwd.matches(regexZ)) {
            return "弱";
        }
        if (pwd.matches(regexS)) {
            return "弱";
        }
        if (pwd.matches(regexT)) {
            return "弱";
        }
        if (pwd.matches(regexZT)) {
            return "中";
        }
        if (pwd.matches(regexST)) {
            return "中";
        }
        if (pwd.matches(regexZS)) {
            return "中";
        }
        if (pwd.matches(regexZST)) {
            return "强";
        }
        return pwd;

    }

    public static void main(String[] args) {
        System.out.println(pwdIsOk("??..........13a"));
    }
}
